# 字符串是一个无法修改的数据容器，只可以存储字符串，支持索引和切片来进行操作
# 由于str不可变，所有字符串的方法都不会修改原字符串，而是返回一个新的字符串
# 用引号引起的都是字符串
# 字符串操作
name="ada lobelace ada"
print(name.replace('ada','bdc'))#将字符串内全部的ada，替换为bdc(不是修改字符串本身，而是得到了一个新的字符串)
print(name.split(' '))#按照指定的分隔符字符串，将字符串划分为多个字符串，并存入列表对象中
print(name.count('ad'))#获取指定元素出现的次数
print(len(name)) # len函数可以返回对象中的元素个数，从1开始计算(字符串长度)
print(name.title())
first_name="ada"
last_name="lovelace"
full_name=f"{first_name} {last_name}"
print(full_name)
# \t 制表符
# \n 换行符
test="python"
print(type(test))
print("获取第一个字符%s"%test[0])
for item in test:
    print(item,end=' ')
name='peter'
print('姓名首字母转换大写%s'%name.capitalize())
a='     hello     '
b=a.strip()#不传入参数，去除字符串首尾两边的空白字符(包括空格、制表符、换行符等)，传入参数则去除字符串首尾指定的字符集合
print(b)
print(a.lstrip())#删除左边的空白字符
print(a.rstrip())#删除右边的空白字符
# removeprefix() 删除指定前缀
# removesuffix() 删除指定后缀
# 复制字符串
print('a的内存地址%d'%id(a))#id函数可以查看一个对象的内存地址
c=a # 使用赋值运算符来复制一个字符串，将a对象的内存地址赋给了c
print('c的内存地址%d'%id(c))
print(c)
dataStr='I love Python'
print(dataStr.find('P'))#find()方法用于检索是否包含指定的子字符串。不存在则返回-1，否则返回首次出现该子字符串时的索引
print(dataStr.index('v'))#index()方法与find()方法类似，只不过如果使用index()方法，当指定的字符串不存在时会抛出异常
print(dataStr.startswith('I'))#该方法用于检索字符串是否以指定子字符串开头，如果是则返回True，否则返回False
print(dataStr.endswith('n'))#该方法用于检索字符串是否以指定子字符串结尾，如果是则返回True，否则返回False p88
print(dataStr.lower())#该方法用于将字符串中的全部大写字母转换为小写字母
print(dataStr.upper())#该方法用于将字符串中的全部小写字母转换为大写字母
strMsg='hello world'
# slice [start:end:step] 左闭右开
print(strMsg)#输出完整的数据
print(strMsg[0])
print(strMsg[2:5])#实际是3-5的数据
print(strMsg[2:])#第3个字符到最后
print(strMsg[0:3])#1-3 0可以省略
print(strMsg[::-1])#倒序输出，从右往左遍历